/*
 * MediaEncoder.h
 *
 *  Created on: 2016年1月12日
 *      Author: terry
 */

#ifndef MEDIAENCODER_H_
#define MEDIAENCODER_H_

#include "MediaFormat.h"
#include "MediaProfile.h"
#include "SharedPtr.h"
#include "Ffmpeg.h"


namespace av
{

class MediaEncoder
{
public:
	virtual ~MediaEncoder() {}

	virtual int open(const MediaProfile& profile) =0;

	virtual void close() =0;

	virtual bool isOpen() =0;

	virtual int encode(AVFrame* frame, AVPacket* pkt) =0;

	virtual void flush() =0;

	virtual bool getMediaFormat(MediaFormat& fmt) =0;

	/// 获取输入的帧格式
	virtual bool getInputFormat(int& pixelFormat, int& sampleFormat) = 0;

	/// 启用硬件加速 
	virtual void enableAccel(bool enabled) = 0;

	virtual bool setParam(const std::string& name, const char* value) = 0;

};


typedef std::shared_ptr< MediaEncoder >		MediaEncoderPtr;


} /* namespace av */

#endif /* MEDIAENCODER_H_ */
